/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.intesal.seguridad.controlador;

import java.sql.ResultSet;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
import org.primefaces.model.MenuModel;
import sv.com.intesal.clases.RutaProyecto;
import sv.com.intesal.seguridad.bean.SessionBean;

/**
 *
 * @author JM
 */
public class SessionControlador {

    private String nombreFormulario = "";
    private String accion = "";

    public Integer getCodigo_Usuario() {
        SessionBean person = this.person();
        return person.getCodigo_u();
    }

    public Integer getCodigo_Empleado() {
        SessionBean person = this.person();
        return person.getCodigo_em();
    }

    public Integer getCodigo_Sucursal() {
        return this.person().getCodigo_s();
    }

    public String getEmpleado_Nombre() {
        return this.person().getNombre_em();
    }

    public String getUser() {
        return this.person().getUser();
    }

    public String getEmpleado_Apellido() {
        return this.person().getApellido_em();
    }

    public Integer getNivel() {
        return Integer.parseInt(this.person().getNivel());
    }

    public MenuModel getMenuModel() {
        return (MenuModel) this.person().getMenuModel();
    }

    public Integer getCodigo_Proceso_Modificar() {
        try {
            return this.person().getCodigo_proceso_modificar();
        } catch (Exception e) {
            /*Hacer pruebas Si no funciona devuelve ZERO para no dar errores en el managed*/
            return 0;
        }
    }

    public Integer getCodigo_Proceso_DC() {
        try {
            return this.person().getCodigo_proceso_dc();
        } catch (Exception e) {
            /*Hacer pruebas Si no funciona devuelve ZERO para no dar errores en el managed*/
            return 0;
        }
    }

    public void setCodigo_Proceso_DC(Integer codigo_proceso) {
        this.person().setCodigo_proceso_dc(codigo_proceso);
    }

    public SessionBean getSessionBean() {
        return this.person();
    }

    public void setCodigo_Proceso_Modificar(int codigo_proceso_modificar) {
        this.person().setCodigo_proceso_modificar(codigo_proceso_modificar);
    }

    private SessionBean person() {
        try {
            HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
            SessionBean person = (SessionBean) session.getAttribute("person");
            return person;
        } catch (Exception ex) {
            //ex.printStackTrace();
            return null;
        }
    }

    public Boolean authenticateSession() throws Exception {
        /*ESTA FUNCIONA ES LA QUE SE LLAMA EN EL MANAGED DE CADA PAGINA y solo validara si ha entrado de forma segura sin ROLES DE USUARIOS*/
        SessionBean person = null;
        person = this.getSessionBean();
        if (person == null) {
            System.out.println("false persona");
            return false;
        }
        System.out.println("true persona");
        return true;
    }

    public Boolean validar_roles() throws Exception {

        SessionBean person = null;
        person = this.getSessionBean();
        ResultSet rs = null;
        try {
            if (person == null) {
                return false;
            }
            RolesControlador rc = new RolesControlador();
            if (rc.validarRoles_Accion(this.nombreFormulario, this.accion, person.getCodigo_u()) == true) {
                return true;
            }
            return false;
        } catch (Exception ex) {
            throw new Exception(ex);
        }
    }

    public void setInvalidarSession() throws Exception {
        HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
        session.invalidate();
        this.redireccionarLogin();
    }

    public void redireccionarLogin() throws Exception {
        try {
            ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
            context.redirect(RutaProyecto.wfrmLogin);
        } catch (Exception e) {
            System.out.println("error en redireccionarLogin");
            throw new Exception(e);
        }
    }

    public void redireccionarReporte() throws Exception {
        try {
            ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
            context.redirect("/ModuloReportes/GeneraReporte?idReporteGenera=123");
        } catch (Exception e) {
            System.out.println("error en redireccionarLogin");
            //throw new Exception(e);
        }
    }

    public void redireccionar_Codigo_Proceso_Modifcar(Integer codigo, String redirectPath) throws Exception {
        try {


            this.setCodigo_Proceso_Modificar(codigo);
            ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
            context.redirect("/SICOPI" + redirectPath);
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public void redireccionar(String webForm) throws Exception {
        /* SE UTILIZA EN EL MENU BAR*/
        try {
            ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
            context.redirect(webForm);
        } catch (Exception e) {
            System.out.println("error en redireccionarLogin");
            //throw new Exception(e);
        }
    }

    /*
     *Setters & Getters
     */
    public String getAccion() {
        return accion;
    }

    public void setAccion(String accion) {
        this.accion = accion;
    }

    public String getNombreFormulario() {
        return nombreFormulario;
    }

    public void setNombreFormulario(String nombreFormulario) {
        this.nombreFormulario = nombreFormulario;
    }
}
